{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas.plotting import register_matplotlib_converters\n",
    "register_matplotlib_converters()\n",
    "\n",
    "import yfinance as yf\n",
    "\n",
    "from mlfinlab.labeling.matrix_flags import MatrixFlagLabels"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Labeling: Matrix Flags\n",
    "\n",
    "\n",
    "## Abstract \n",
    "\n",
    "The matrix flag labeling method is a multistep labeling method meant to match a data window of price data for a single stock with a template. In the literature, the template presented is a bull flag 10 by 10 template, with the first 7 columns representing the consolidation following an initial price surge, and the final 3 represent the breakout. Each column of the template corresponds to a chronological tenth of the data, and each row corresponds to a decile relative to the entire data window. Each element contains the proportion of points in each tenth that corresponds to the appropriate decile given by row. Once the data has been transformed this way, it is multiplied element-wise with the template, and the sum of all elements in the resulting matrix is the scalar value denoting total fit for the day. The higher the fit, the better match with the template pattern.\n",
    "\n",
    "## Introduction \n",
    "\n",
    "Labeling price data according to a template to identify patterns in price changes is featured in the following paper:\n",
    "[\"Stock market trading rule based on pattern recognition and technical analysis: Forecasting the DJIA index with intraday data.\"](https://www.sciencedirect.com/science/article/abs/pii/S0957417415002110), by Cervelló-Royo et al., 2015.\n",
    "\n",
    "This method was originally introduced in [Stock market trading rule discovery\n",
    "using technical charting heuristics.](http://chart-patterns.technicalanalysis.org.uk/LMPR02.pdf), by Leigh et al., 2002, which describes this method in more detail.\n",
    "\n",
    "A bull flag occurs when a stock's price rapidly increases, followed by a downwards trending consolidation period, followed by a breakout increase in price legitimizing and confirming the original increase. As defined, \"A bull flag pattern is a horizontal or downward sloping flag of consolidation followed by a sharp rise in the positive direction, the breakout.\" [Leigh et al. 2002]. Being able to identify the early stages of the breakout process can lead to a profitable strategy of buying the breakout and then selling some number of days later, when the price has theoretically stabilized again.\n",
    "\n",
    "Cervelló-Royo et al. expand on Leigh et al.'s work by proposing a new bull flag pattern which ameliorates some weaknesses in Leigh's original template, such as the possibility of false positives given the path the stock took. Additionally, he applies this bull flag labeling method to intraday candlestick data, rather than just daily closing prices.\n",
    "\n",
    "## How it works\n",
    "\n",
    "The bull flag labeling pattern requires the use of a template to match the price data to. Below is an example bull flag\n",
    "template originally used by Leigh et al. in 2002, and mentioned by Cervelló-Royo et al.\n",
    "\n",
    "![image_example](img/bull_flag_template.png)\n",
    "_*Fig. 1:*_ Original bull flag template. First 7 columns represend the consolidation while the last 3 represent breakout.\n",
    "\n",
    "The matrix flag labeling method, in order to find a single day's fit, consists of the following steps:\n",
    "\n",
    " - The data window is taken, which consists of the current day's price and a number of days preceding.\n",
    " - The prices in the data window are ranked and decile cutoffs are found. A mapping is found between each price and its decile.\n",
    " - The data window is split into 10 chronological buckets each containing a tenth of the data window.\n",
    " - Each data window bucket is converted to a column of 10 elements, with the first bucket corresponding to the leftmost column, the second\n",
    "   to the second from left, and so on until the last bucket corresponds to the rightmost column. Each row in a column corresponds to decile over\n",
    "   the entire data window, with the top row corresponding to top 90-100th percentile, second row corresponding to the 80-90th percentile, and\n",
    "   so on.\n",
    " - The mapping between price and decile over the data window is applied, and each row consists of the proportion of points in the bucket which\n",
    "   falls into each decile. For example, suppose the second bucket contains 50% points in the 20-30th percentile, and 50% points in the 0-10th\n",
    "   percentile. The corresponding column would be, from top to bottom, \\[0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.5\\]. This process is done for all ten\n",
    "   buckets, until a 10 by 10 matrix is formed.\n",
    " - This 10 by 10 matrix is multiplied element-wise by the template. The sum of all elements of this resulting matrix is calculated to be the\n",
    "   total fit for the day.\n",
    " - If a threshold is given, the fit is converted to a categorical label, with the positive class given if the fit equals or exceeds the\n",
    "   threshold, and the negative class otherwise. The value of the threshold depends on how strict of a classifier the user\n",
    "   desires, and the allowable values based on the template matrix.\n",
    "\n",
    "It's perhaps easiest to illustrate this process with a simple example. Suppose we have the following data window of 20\n",
    "prices \\[100, 102, ..., 118, 120, 118, ..., 104, 102\\] i.e. rising monotonically to 120 and then falling back to 102.\n",
    "The decile cutoffs are then \\[102, 104, ..., 120\\]. Note that these cutoffs are right inclusive, so a value of 102 would\n",
    "fit into the (100, 102) percentile.\n",
    "\n",
    "We split the data into ten chronological subsets such that the first subset is \\[100, 102\\]. 100% of elements in the first subset fall into the lowest decile, so the corresponding column would be \\[0, 0, 0, 0, 0, 0, 0, 0, 0, 1\\]. The second subset is \\[104, 106\\], of which 1 out of 2 prices is in the 2nd decile, and the other is in the 3rd decile, so the column would be \\[0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0\\]. This is done until the entire 10 by 10 matrix is generated. The columns in this matrix represent the 10 chronological subsets, and each element in the column represents the proportion of points in each subset corresponding to its respective decile over the entire data window.\n",
    "\n",
    "This matrix is then multiplied element-wise by the template, and resulting values are summed to get the total template fit. The higher the fit, the better match to the template. Using the template shown above, the highest possible fit is 10.\n",
    "\n",
    "---\n",
    "## Examples of use"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "2019-01-02    243.03\n",
       "2019-01-03    237.23\n",
       "2019-01-04    245.17\n",
       "2019-01-07    247.11\n",
       "2019-01-08    249.43\n",
       "Name: Close, dtype: float64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load price data. This method works on price data for a single stock, so a pd.Series must be used.\n",
    "msft = yf.Ticker('SPY')\n",
    "msft_df = msft.history(start='2019-1-1', end ='2020-5-18')\n",
    "\n",
    "close = msft_df['Close']\n",
    "close.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualizing the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax = plt.plot(close)\n",
    "fig.autofmt_xdate()\n",
    "plt.title('MSFT Stock Price')\n",
    "plt.xlabel('Date');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Getting scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "2019-03-01   -2.375\n",
       "2019-03-04   -2.000\n",
       "2019-03-05   -2.375\n",
       "2019-03-06   -2.375\n",
       "2019-03-07   -2.500\n",
       "              ...  \n",
       "2020-05-11   -2.750\n",
       "2020-05-12   -2.500\n",
       "2020-05-13   -2.500\n",
       "2020-05-14   -2.250\n",
       "2020-05-15   -2.750\n",
       "Length: 306, dtype: float64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# We will use a window of 40.\n",
    "window1 = 40\n",
    "Flags = MatrixFlagLabels(prices=close, window=window1, template_name='leigh_bull')\n",
    "Flags.apply_labeling_matrix()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The higher the fit value for the day, the better the prices in the window preceding match the bull flag template. For categorical labels, we can use a threshold. Daily fits above the threshold will return a positive label."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1    271\n",
       " 1     35\n",
       "dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Use threshold of 3.\n",
    "categorical = Flags.apply_labeling_matrix(threshold=3)\n",
    "categorical.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Impact of window size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can visualize the points which get identified as being part of a bull flag pattern. The positive class marked on the figure match visually what a bull flag can look like. However, it's important to use the appropriate window relative to the timescale of price movements in the underlying; using too large or small of a window may result in missed labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "positives = close[window1:][categorical==1]\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "ax = plt.plot(close)\n",
    "plt.scatter(positives.index, positives, color='g')\n",
    "fig.autofmt_xdate()\n",
    "plt.title('Window = 40 days');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here are similar visualizations for varying window sizes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Window is 10.\n",
    "Flags2 = MatrixFlagLabels(prices=close, window=10, template_name='leigh_bull')\n",
    "categorical2 = Flags2.apply_labeling_matrix(threshold=3)\n",
    "positives2 = close[10:][categorical2==1]\n",
    "fig, ax = plt.subplots()\n",
    "ax = plt.plot(close)\n",
    "plt.scatter(positives2.index, positives2, color='g')\n",
    "fig.autofmt_xdate()\n",
    "plt.title('Window = 10 days');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Window is 80.\n",
    "Flags3 = MatrixFlagLabels(prices=close, window=80, template_name='leigh_bull')\n",
    "categorical3 = Flags3.apply_labeling_matrix(threshold=3)\n",
    "positives3 = close[80:][categorical3==1]\n",
    "fig, ax = plt.subplots()\n",
    "ax = plt.plot(close)\n",
    "plt.scatter(positives3.index, positives3, color='g')\n",
    "fig.autofmt_xdate()\n",
    "plt.title('Window = 80 days');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, having a shorter window results in identifying short term, more granular bull flags, while missing longer term trends. Having a longer window identifies longer term bull trends, but misses shorter term prices movements."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setting custom template"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The default template is the one used by Leigh et al. However, there are some weaknesses with that template, in that false positives are possible depending on the path of prices \\[Cervello-Royo et al., 2015\\]. Referring to the template above, it is possible to trace the +1 values through the first 8 columns, and then rather than breaking out, trace the 0, and -2 values in the final 2 columns. This results in a very high fit value of 6, which should indicate a strong bull flag, but this is clearly a false positive. Cervelló-Royo et al. propose another template, which would ameliorate this problem. This template is likely only appropriate for intraday data, such as 15 minute bars, as it is too strict, with only 1 positive cell, to be used on end-of-day prices, which would demonstrate more local randomness."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Cervelló-Royo's template\n",
    "new_template = pd.DataFrame([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
    "                            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
    "                            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
    "                            [0, 0, 0, 0, -1, -1, -1, -1, -1, -1],\n",
    "                            [0, 0, 0, -1, -2, -2, -2, -2, -2, -2],\n",
    "                            [0, 0, -1, -3, -3, -3, -3, -3, -3, -3],\n",
    "                            [0, -1, -3, -5, -5, -5, -5, -5, -5, -5],\n",
    "                            [0, -1, -5, -5, -5, -5, -5, -5, -5, -5],\n",
    "                            [0, -1, -5, -5, -5, -5, -5, -5, -5, -5],\n",
    "                            [5, -1, -5, -5, -5, -5, -5, -5, -5, -5]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "      <td>-2</td>\n",
       "      <td>-2</td>\n",
       "      <td>-2</td>\n",
       "      <td>-2</td>\n",
       "      <td>-2</td>\n",
       "      <td>-2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "      <td>-3</td>\n",
       "      <td>-3</td>\n",
       "      <td>-3</td>\n",
       "      <td>-3</td>\n",
       "      <td>-3</td>\n",
       "      <td>-3</td>\n",
       "      <td>-3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "      <td>-3</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>5</td>\n",
       "      <td>-1</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   0  1  2  3  4  5  6  7  8  9\n",
       "0  0  0  0  0  0  0  0  0  0  0\n",
       "1  0  0  0  0  0  0  0  0  0  0\n",
       "2  0  0  0  0  0  0  0  0  0  0\n",
       "3  0  0  0  0 -1 -1 -1 -1 -1 -1\n",
       "4  0  0  0 -1 -2 -2 -2 -2 -2 -2\n",
       "5  0  0 -1 -3 -3 -3 -3 -3 -3 -3\n",
       "6  0 -1 -3 -5 -5 -5 -5 -5 -5 -5\n",
       "7  0 -1 -5 -5 -5 -5 -5 -5 -5 -5\n",
       "8  0 -1 -5 -5 -5 -5 -5 -5 -5 -5\n",
       "9  5 -1 -5 -5 -5 -5 -5 -5 -5 -5"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Flags4 = MatrixFlagLabels(prices=close, window=30, template_name=None)\n",
    "Flags4.set_template(new_template)\n",
    "Flags4.template"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bear instead of bull flags"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's stick to the original template, but flip it horizontally to create the bear flag template instead. Note that we could have also initialized with template_name='leigh_bear' instead also."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>-2.0</td>\n",
       "      <td>-2.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.5</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     0    1    2    3    4    5    6    7    8    9\n",
       "0 -1.0 -1.0 -1.0 -1.0 -1.0  0.0  0.5  0.5 -2.0 -2.5\n",
       "1 -1.0 -1.0 -1.0 -0.5  0.0  0.5  1.0  1.0  0.0 -2.0\n",
       "2 -0.5 -1.0  0.0  0.0  0.5  1.0  1.0  1.0  1.0  0.0\n",
       "3 -0.5  0.0  0.0  0.5  1.0  1.0  0.5  0.5  1.0  1.0\n",
       "4  0.0  0.0  0.5  1.0  1.0  0.5  0.0  0.0  1.0  1.0\n",
       "5  0.0  0.5  1.0  1.0  0.5  0.0  0.0  0.0  0.5  1.0\n",
       "6  0.5  1.0  1.0  0.5  0.0 -0.5 -0.5 -0.5  0.0  1.0\n",
       "7  1.0  1.0  0.5  0.0 -0.5 -0.5 -0.5 -0.5  0.0  0.5\n",
       "8  1.0  0.5  0.0 -0.5 -1.0 -1.0 -1.0 -1.0 -0.5  0.0\n",
       "9  0.5  0.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0  0.0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "window5=40\n",
    "Flags5 = MatrixFlagLabels(prices=close, window=window5, template_name='leigh_bull')\n",
    "bear_template = pd.DataFrame(np.flip(np.array(Flags5.template), axis=0))\n",
    "Flags5.set_template(bear_template)\n",
    "Flags5.template"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "categorical5 = Flags5.apply_labeling_matrix(threshold=3)\n",
    "positives5 = close[window5:][categorical5==1]\n",
    "fig, ax = plt.subplots()\n",
    "ax = plt.plot(close)\n",
    "plt.scatter(positives5.index, positives5, color='g')\n",
    "fig.autofmt_xdate()\n",
    "plt.title('Window = 40 days, Bear flags');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Error Handling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When initializing the class, note that the length of data series must be at least 10, window must be at least 10, length of data cannot be less than the window, and the data must be a pd.Series."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length of data must be at least 10.\n",
      "Window must be at least 10.\n",
      "Window cannot be greater than length of data.\n",
      "Data must be pd.Series.\n"
     ]
    }
   ],
   "source": [
    "try:\n",
    "    MatrixFlagLabels(close[0:7], window=30)\n",
    "except Exception as exc:\n",
    "    print(exc)\n",
    "\n",
    "try:\n",
    "    MatrixFlagLabels(close[0:50], window=5)\n",
    "except Exception as exc:\n",
    "    print(exc)\n",
    "    \n",
    "try:\n",
    "    MatrixFlagLabels(close[0:30], window=100)\n",
    "except Exception as exc:\n",
    "    print(exc)\n",
    "\n",
    "try:\n",
    "    MatrixFlagLabels([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], window=10)\n",
    "except Exception as exc:\n",
    "    print(exc)   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When setting a new template, the template must be a 10 by 10 matrix without any NaN values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "wrong_shape = pd.DataFrame(np.random.randint(-3, 3, size=(9, 10)))\n",
    "right_shape_with_nan = pd.DataFrame(np.random.randint(-3, 3, size=(10, 10)))\n",
    "right_shape_with_nan.iloc[2,2] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Template must be 10 by 10.\n",
      "No NaN values allowed in template.\n"
     ]
    }
   ],
   "source": [
    "flags_error = MatrixFlagLabels(close[0:50], 10)\n",
    "                              \n",
    "try:\n",
    "    flags_error.set_template(wrong_shape)\n",
    "except Exception as exc:\n",
    "    print(exc)\n",
    "\n",
    "try:\n",
    "    flags_error.set_template(right_shape_with_nan)\n",
    "except Exception as exc:\n",
    "    print(exc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook demonstrates the method of applying a template matrix to data for labeling, which works on price data, where the label for a given day depends on price for the day and the preceding window number of prices. The data in this data window are split into 10 equally sized chronological buckets, and the values are mapped to their deciles over the data window. Each column from left to right corresponds to a chronological data bucket, and each row corresponds to a decile over the entire window, with the top row representing the highest decile, the next row the second highest and so on. The elements are populated by the proportion of data points in each bucket which fall in the decile determined by row. This transformed matrix is then multiplied element-wise with the template, and the sum of all elements in the resulting matrix is summed to find the total fit.\n",
    "\n",
    "This method depends on the user knowing the correct template to use, as well as understanding the time scale of the data when setting a window. Windows which are small will catch granular changes, but not longer term trends, while large windows will capture long term trends but not small changes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Cervelló-Royo, R., Guijarro, F. and Michniuk, K., 2015. Stock market trading rule based on pattern recognition and technical analysis: Forecasting the DJIA index with intraday data. Expert Systems with Applications, 42(14), pp.5963-5975.\n",
    "2. Leigh, W., Modani, N., Purvis, R. and Roberts, T., 2002. Stock market trading rule discovery using technical charting heuristics. Expert Systems with Applications, 23(2), pp.155-159."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
